﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<unordered_set>
#include<unordered_map>
#include<map>
#include<set>
#include<string>
using namespace std;
#include <time.h>

#include "HashTable.h"
#include "UnorderedSet.h"
#include "UnorderedMap.h"

#include "BitSet.h"

#include "BloomFilter.h"


//#include "HashTable副本.h"

//int main()
//{
//	unordered_set<int> us;
//	us.insert(3);
//	us.insert(1);
//	us.insert(3);
//	us.insert(2);
//	us.insert(0);
//	unordered_set<int>::iterator it = us.begin();
//	while (it != us.end())
//	{
//		cout << *it << " ";
//		++it;
//	}
//	cout << endl;
//	string arr[] = { "苹果", "西瓜", "香蕉", "草莓", "苹果", "西瓜", 
//		"苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉" };
//	unordered_map<string, int> countMap;
//	for (auto& e : arr)
//	{
//		//map<string, int>::iterator it = countMap
//		/*auto it = countMap.find(e);
//		if (it == countMap.end())
//		{
//			countMap.insert(make_pair(e, 1));
//		}
//		else
//		{
//			it->second++;
//		}*/
//
//		countMap[e]++;
//	}
//	for (const auto& kv : countMap)
//	{
//		cout << kv.first << ":" << kv.second << endl;
//	}
//	return 0;
//}

//int main()
//{
//	srand(time(0));
//	vector<int> v;
//	size_t N = 1000000;//可以加到更大
//	for (size_t i = 0; i < N; ++i)
//	{
//		//这里采用大量随机值的测试样例！
//		//v.push_back(rand());//少量随机值
//		v.push_back(rand() + i);//大量随机值
//		//v.push_back(i);//有序值
//	}
//	set<int> st;
//	unordered_set<int> uns;
//
//	size_t begin1 = clock();
//	for (const auto& e : v)
//	{
//		st.insert(e);
//	}
//	size_t end1 = clock();
//
//	size_t begin2 = clock();
//	for (const auto& e : v)
//	{
//		uns.insert(e);
//	}
//	size_t end2 = clock();
//
//	cout << "set insert : " << end1 - begin1 << endl;
//	cout << "unordered_set insert : " << end2 - begin2 << endl;
//
//	cout << "set size : " << st.size() << endl;
//	cout << "unordered_set size : " << st.size() << endl;
//
//	size_t begin3 = clock();
//	for (const auto& e : v)
//	{
//		st.find(e);
//	}
//	size_t end3 = clock();
//
//	size_t begin4 = clock();
//	for (const auto& e : v)
//	{
//		uns.find(e);
//	}
//	size_t end4 = clock();
//
//	cout << "set find : " << end3 - begin3 << endl;
//	cout << "unordered_set find : " << end4 - begin4 << endl;
//
//	size_t begin5 = clock();
//	for (const auto& e : v)
//	{
//		st.erase(e);
//	}
//	size_t end5 = clock();
//
//	size_t begin6 = clock();
//	for (const auto& e : v)
//	{
//		uns.erase(e);
//	}
//	size_t end6 = clock();
//
//	cout << "set erase : " << end5 - begin5 << endl;
//	cout << "unordered_set erase : " << end6 - begin6 << endl;
//	return 0;
//}



int main()
{
	//closehash::TestHT1();
	//buckethash::TestHT1();
	//buckethash::TestHT2();

	//bzh::test_unordered_set();
	//bzh::test_unordered_map();

	/*bit::test_bitset();*/
	//bit::test_twobit();

	bit::test_bloomfilter1();
	bit::test_bloomfilter2();
	return 0;
}